package com.justgame.project.service.just.service.basic;

import com.justgame.project.service.just.entity.JustGameAttention;
import com.justgame.project.service.just.query.JustGameAttentionQuery;
import com.justgame.project.service.just.wrapper.JustGameAttentionWrapper;
import com.justgame.project.base.servcice.IBasicService;
import java.util.Optional;
import java.util.List;
import java.lang.Long;
import org.springframework.util.Assert;
import org.springframework.lang.NonNull;
import java.lang.String;

/**
 *
 * 游戏信息关注表服务自定义查询类
 *
 * @@tableName just_game_attention
 * @author Zwb
 */
@SuppressWarnings("all")
public interface BasicJustGameAttentionService extends IBasicService<JustGameAttentionQuery,JustGameAttention,JustGameAttentionWrapper> {

   /**
    * 查询通过字段：游戏信息ID、来源
    * @param gameInfoIdIs 游戏信息ID
    * @param targetIs 来源
    */
   default Optional<JustGameAttention> findByGameInfoIdIsAndTargetIs(Long gameInfoIdIs, JustGameAttention.Target targetIs){
      return Optional.ofNullable(getOne(JustGameAttentionQuery.builder().getWrapper()
                  .eq(JustGameAttention::getGameInfoId,gameInfoIdIs)
                  .eq(JustGameAttention::getTarget,targetIs)));
   }

   /**
    * 查询通过字段：游戏信息ID
    * @param gameInfoIdIs 游戏信息ID
    */
   default List<JustGameAttention> listByGameInfoIdIs(Long gameInfoIdIs){
      return list(JustGameAttentionQuery.builder().getWrapper()
                  .eq(JustGameAttention::getGameInfoId,gameInfoIdIs));
   }

   /**
    * 更新相关字段：来源
    * @param target 来源
    */
   default boolean updateByTarget(@NonNull JustGameAttention justGameAttention,JustGameAttention.Target target){
      Assert.notNull(target,"必须提供来源");
      Assert.notNull(justGameAttention.getId(),"必须提供主键ID");
      justGameAttention.setTarget(safeValue(target, null));
      return updateById(justGameAttention);
   }

   /**
    * 新增通过字段：游戏信息ID、来源
    * @param gameInfoId 游戏信息ID
    * @param target 来源
    */
   default JustGameAttention addByGameInfoIdAndTarget(Long gameInfoId, JustGameAttention.Target target){
      Assert.notNull(gameInfoId,"必须提供游戏信息ID");
      Assert.notNull(target,"必须提供来源");
      JustGameAttention justGameAttention = new JustGameAttention();
      justGameAttention.setGameInfoId(safeValue(gameInfoId, null));
      justGameAttention.setTarget(safeValue(target, null));
      save(justGameAttention);
      return justGameAttention;
   }

   /**
    * 新增创建
    * @param gameInfoId 游戏信息ID
    * @param target 来源
    */
   default JustGameAttention baseAdd(Long gameInfoId, JustGameAttention.Target target){
      JustGameAttention justGameAttention = new JustGameAttention();
      justGameAttention.setGameInfoId(safeValue(gameInfoId, null));
      justGameAttention.setTarget(safeValue(target, null));
      save(justGameAttention);
      return justGameAttention;
   }

   /**
    * 更新
    * @param gameInfoId 游戏信息ID
    * @param target 来源
    */
   default boolean baseUpdate(@NonNull JustGameAttention justGameAttention,Long gameInfoId, JustGameAttention.Target target){
      Assert.notNull(gameInfoId,"必须提供游戏信息ID");
      Assert.notNull(target,"必须提供来源");
      Assert.notNull(justGameAttention.getId(),"必须提供主键ID");
      justGameAttention.setGameInfoId(safeValue(gameInfoId, null));
      justGameAttention.setTarget(safeValue(target, null));
      return updateById(justGameAttention);
   }

}